package view;

import models.HoursTableModel;
import presenter.Presenter;
import table_objects.DzienPracy;

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.util.*;
import java.util.List;

/**
 * Autor: Daniel Michalski
 * Data: 18.06.13
 */

public class Okienko extends JFrame {
    public static final String FILE_NAME = "dni.data";

    private Presenter presenter;
    private SrodkowyPanel srodkowyPanel;
    private JTable tabelka;

    public Okienko() {
        ustawRamke();
        ustawKomponenty();
    }

    private void ustawRamke() {
        setSize(800, 500);
        setTitle("Termianrz wejść i wyjść");
        setLocationRelativeTo(null);
        setLayout(new BorderLayout(10,10));
        addWindowListener(new SluchaczZamykaniaOkna());
        getContentPane().setBackground(Color.black);
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            JOptionPane.showMessageDialog(
                    null,
                    "Wystąpił błąd podczas ładowania wyglądu okna: " + e,
                    "Uwaga",
                    JOptionPane.INFORMATION_MESSAGE);
        }

        this.setIconImage(Toolkit.getDefaultToolkit().getImage("ikona.png"));
    }

    private void ustawKomponenty() {
        GornyPanel gornyPanel = new GornyPanel();
        add(gornyPanel, BorderLayout.NORTH);

        SrodkowyPanel srodkowyPanel = new SrodkowyPanel();
        add(srodkowyPanel, BorderLayout.CENTER);

        DolnyPanel dolnyPanel = new DolnyPanel();
        add(dolnyPanel, BorderLayout.SOUTH);

        tabelka = srodkowyPanel.getTabela();

        presenter = new Presenter();
        presenter.setDateChooser(gornyPanel.getDateChooser());
        presenter.setGodzinaWejsciaSpinner(gornyPanel.getGodzinaWejsciaSpinner());
        presenter.setMinutyWejsciaSpinner(gornyPanel.getMinutyWejsciaSpinner());
        presenter.setGodzinaWyjsciaSpinner(gornyPanel.getGodzinaWyjsciaSpinner());
        presenter.setMinutyWyjsciaSpinner(gornyPanel.getMinutyWyjsciaSpinner());
        presenter.setZapiszBT(gornyPanel.getZapiszBT());
        presenter.setIleGodzinLabel(dolnyPanel.getIleGodzinLabel());
        presenter.setTabela(srodkowyPanel.getTabela());
        presenter.setUsunBtn(srodkowyPanel.getUsunBtn());
    }

    class SluchaczZamykaniaOkna extends WindowAdapter {
        @Override
        public void windowClosing(WindowEvent e) {
            HoursTableModel tableModel = (HoursTableModel) tabelka.getModel();
            List<DzienPracy> dniPracy = tableModel.getWiersze();

            try{
                //use buffering
                OutputStream file = new FileOutputStream( FILE_NAME );
                OutputStream buffer = new BufferedOutputStream( file );
                ObjectOutput output = new ObjectOutputStream( buffer );
                try{
                    output.writeObject(dniPracy);
                }
                finally{
                    output.close();
                }
            }
            catch(IOException ex){
                System.out.println("Nie można zapisać pliku");
            }
        }
    }
}
